/*
 * Description:  Common Utils in windows
 */

#ifndef TEXTUTILS_H
#define TEXTUTILS_H
#include <string>
#include <vector>
#include <windows.h>

namespace COMMON {
class TextUtils {
public:
    /********************
    函数：Cmds2File
    功能: Cmds写入到file
    参数：Cmds内容,filePath路径
    返回值：是否写入
     ********************/
    static bool Cmds2File(const std::vector<std::string> &cmds, const std::string &filePath);

    /********************
    函数：CheckIpAddr
    功能：校验指定ip
    参数：ip地址
    返回值：是否为ipv4地址
     ********************/
    static bool CheckIpAddr(const std::string &ip);

    /********************
    函数：IsValidFileName
    功能：校验文件名
    参数：文件名
    返回值：文件名是否合法
     ********************/
    static bool IsValidFileName(const std::string &fileName);

    /********************
    * 函数：UnicodeToUTF8
    * 功能：wstr转为str
    * 参数：wstr
    * 返回：str
    ********************/
    static std::string UnicodeToUTF8(const std::wstring& value);

    /********************
    * 函数：CheckSqlInput
    * 功能：字符串输入
    * 参数：string
    * 返回：是否造成SQL注入
    ********************/
    static bool CheckSqlInput(const std::string &input);

    /********************
    * 函数：UTF8ToGBK
    * 功能：UTF8字符串转为GBK
    * 参数：UTF8字符串
    * 返回：GBK字符串
    ********************/
    static std::string UTF8ToGBK(const std::string &strUTF8);

    /********************
    函数：FilePatchCheck
    功能：校验文件路径
    参数：文件路径
    返回值：文件路径是否合法
     ********************/
    static bool FilePatchCheck(const std::string &filePath);

    /********************
    函数：FileExists
    功能：校验文件是否存在
    参数：文件路径
    返回值：文件是否存在
     ********************/
    static bool FileExists(const std::string& filePath);

    /********************
     * 函数：PwcharToString
     * 功能：PWCHAR字符串转为std::string字符串
     * 参数：PWCHAR字符串
     * 返回：std::string字符串
     ********************/
    static std::string PwcharToString(PWCHAR pwstr);

    /********************
     * 函数：CheckGuid
     * 功能：校验guid
     * 参数：guid字符串
     * 返回：guid是否符合规范
     ********************/
    static bool CheckGuid(const std::string& guid);
    
    /********************
     * 函数：WCharToUTF8
     * 功能：WChar转UTF8
     * 参数：wchar_t
     * 返回：string
     ********************/
    static std::string WCharToUTF8(const wchar_t* wstr);
    
    /********************
     * 函数：HKEYToHexString
     * 功能：HKEYToHexString
     * 参数：hkey
     * 返回：string
     ********************/
    static std::string HKEYToHexString(HKEY hkey);

    /********************
     * 函数：LPCSTRToUTF8
     * 功能：LPCSTRToUTF8
     * 参数：src
     * 返回：string
     ********************/
    static std::string LPCSTRToUTF8(LPCSTR src);
    
    /********************
     * 函数：ReplaceLastChar
     * 功能：ReplaceLastChar
     * 参数：filePath,replacement
     * 返回：NA
     ********************/
    static bool ReplaceLastChar(
        const std::string& filePath, const std::string& replacement);
};
}
#endif